home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / mac / DirectX SDK / DXSDK / include / DShowIDL / dyngraph.idl < prev    next >
Text File  |  2001-10-08  |  12KB  |  319 lines

  1. //------------------------------------------------------------------------------
  2. // File: DynGraph.idl
  3. //
  4. // Desc: Dynamic graph interfaces
  5. //
  6. // Copyright (c) 1999-2001, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. interface IPinConnection;
  11. interface IPinFlowControl;
  12. interface IGraphConfig;
  13. interface IGraphConfigCallback;
  14.  
  15. //--------------------------------------------------------------------
  16. //
  17. //  IPinConnection - supported by input pins
  18. //
  19. //--------------------------------------------------------------------
  20. [
  21.         local,
  22.         object,
  23.         uuid(4a9a62d3-27d4-403d-91e9-89f540e55534),
  24.         pointer_default(unique)
  25. ]
  26. interface IPinConnection : IUnknown {
  27.  
  28.     //  Do you accept this type chane in your current state?
  29.     HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt);
  30.  
  31.     //  Set event when EndOfStream receive - do NOT pass it on
  32.     //  This condition is cancelled by a flush or Stop
  33.     HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent);
  34.  
  35.     //  Are you an 'end pin'
  36.     HRESULT IsEndPin();
  37.  
  38.     HRESULT DynamicDisconnect();
  39. };
  40.  
  41. //--------------------------------------------------------------------
  42. //
  43. //  IPinFlowControl - supported by output pins
  44. //
  45. //--------------------------------------------------------------------
  46. [
  47.         local,
  48.         object,
  49.         uuid(c56e9858-dbf3-4f6b-8119-384af2060deb),
  50.         pointer_default(unique)
  51. ]
  52. interface IPinFlowControl : IUnknown {
  53.     //  Block processing on this pin
  54.     HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent);
  55. }
  56.  
  57. //  block flags
  58. enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS {
  59.     AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001, //  0 means unblock
  60. };
  61.  
  62.  
  63. //  Reconnect flags
  64. typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS {
  65.     AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,
  66.     AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,
  67.     AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004
  68. } AM_GRAPH_CONFIG_RECONNECT_FLAGS;
  69.  
  70. // RemoveFilterEx flags
  71. enum _REM_FILTER_FLAGS {
  72.     REMFILTERF_LEAVECONNECTED = 0x00000001
  73. };
  74.  
  75. typedef enum _AM_FILTER_FLAGS {
  76.      AM_FILTER_FLAGS_REMOVABLE = 0x00000001
  77.  } AM_FILTER_FLAGS;
  78.  
  79.  
  80. //--------------------------------------------------------------------
  81. //
  82. //  IGraphConfig
  83. //
  84. //--------------------------------------------------------------------
  85.  
  86. [
  87.         local,
  88.         object,
  89.         uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88),
  90.         pointer_default(unique)
  91. ]
  92. interface IGraphConfig : IUnknown {
  93.     HRESULT Reconnect([in] IPin *pOutputPin, 
  94.                       [in] IPin *pInputPin,
  95.                       [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  96.                       [in] IBaseFilter *pUsingFilter, // can be NULL
  97.                       [in] HANDLE hAbortEvent,
  98.                       [in] DWORD dwFlags);
  99.  
  100.     HRESULT Reconfigure([in] IGraphConfigCallback *pCallback,
  101.                       [in] PVOID pvContext,
  102.                       [in] DWORD dwFlags,
  103.                       [in] HANDLE hAbortEvent);
  104.  
  105.      
  106.     HRESULT AddFilterToCache([in] IBaseFilter *pFilter);
  107.     HRESULT EnumCacheFilter([out] IEnumFilters **pEnum);
  108.     HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter);
  109.  
  110.     //  Get the start time associated with the last Run() call
  111.     //  If the graph is not running returns VFW_E_WRONG_STATE
  112.     HRESULT GetStartTime([out] REFERENCE_TIME *prtStart);
  113.  
  114.     HRESULT PushThroughData(
  115.         [in] IPin *pOutputPin,
  116.         [in] IPinConnection *pConnection,
  117.         [in] HANDLE hEventAbort);
  118.  
  119.     HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags);
  120.     HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags);
  121.  
  122.     HRESULT RemoveFilterEx( [in] IBaseFilter *pFilter, DWORD Flags );
  123. }
  124.  
  125. //--------------------------------------------------------------------
  126. //
  127. //  IGraphConfigCallback
  128. //
  129. //--------------------------------------------------------------------
  130.  
  131. [
  132.         local,
  133.         object,
  134.         uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375),
  135.         pointer_default(unique)
  136. ]
  137. interface IGraphConfigCallback : IUnknown
  138. {
  139.     HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags);
  140. }
  141.  
  142. // Filter Chain Definition
  143. // 
  144. //  Filter chains have the following properties:
  145. // 
  146. // - Each filter chain has one or more filters.
  147. // 
  148. // - Each filter in a filter chain has at most one connected input pin and one 
  149. //   connected output pin.  For example, filters A, C, D, F, G, H, I, J and K
  150. //   (see the diagram below) can be in a filter chain because each one has at 
  151. //   most one connected input pin and one connected output pin.
  152. // 
  153. // - Any filter in a chain is reachable by any other filter in the chain.  
  154. //   For example, in the filter chain F-G-H, F can reach H by following the F-
  155. //   G connection to G and then following the G-H connection to H.  Filters F 
  156. //   and J cannot be in the same filter chain because J is not reachable from 
  157. //   F.  Anotherwords, there no sequence of connected filters between F and J.
  158. //
  159. // - The start filter is the only filter in the filter chain who's input 
  160. //   pin is not connected to another filter in the chain.  For instance, F is 
  161. //   the start filter in F-G-H because F's input pin is connected to E and E 
  162. //   is not in the filter chain.  G's input pin is connected to F and H's is 
  163. //   connected to G.  Both F and G are in the filter chain.
  164. //
  165. // - The end filter is the only filter in the filter chain who's output pin 
  166. //   is not connected to another filter in the chain.  For example, in the 
  167. //   filter chain J-K, K is the end filter because K's output pin is 
  168. //   connected to L.  J's output pin is connected to K and K is in the J-K 
  169. //   filter chain.
  170. //
  171. //
  172. //            --->|---|    |---|--->                   
  173. //                | C |--->| D |
  174. // |---|    |---|--->|---|    |---|--->|---|    |---|    |---|    |---|
  175. // | A |--->| B |                      | E |--->| F |--->| G |--->| H |
  176. // |---|    |---|--->|---|------------>|---|    |---|    |---|    |---|
  177. //                   | I |--->
  178. //               --->|---|--->
  179. // 
  180. // |---|    |---|    |---|
  181. // | J |--->| K |--->| L |
  182. // |---|    |---|    |---|
  183. // 
  184. //              Example Filter Graph
  185. // 
  186. // 
  187. // 
  188. // IFilterChain Methods Documentation
  189. // 
  190. // HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  191. // 
  192. //      StartChain() switches all the filters in the chain into the running state
  193. // If one of the filters will not switch to the running state, then all the filters 
  194. // in the chain are stopped.  This method can only be called if the filter graph is 
  195. // running.
  196. // 
  197. // Parameters:
  198. // - pStartFilter [in]
  199. //      The first filter in the filter chain.  Note that this can be the same 
  200. // filter as pEndFilter .
  201. // 
  202. // - pEndFilter [in]
  203. //      The last filter in the filter chain.  Note that this can be the same 
  204. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain extends 
  205. // from pStartFilter to the last downstream filter which can be in a filter chain.
  206. // For example, IFilterChain::StartChain( A, NULL ) would start filter A.   
  207. // IFilterChain::StartChain( G, NULL ) would start filters G and H.  
  208. // IFilterChain::StartChain( C, NULL ) would start filters C and D.  Finally, 
  209. // IFilterChain::StartChain( E, NULL ) would fail because E cannot be in a 
  210. // filter chain (see the Filter Chain Definition section for more information).
  211. // 
  212. // Return Value:
  213. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  214. // information on interpreting HRESULTs.
  215. // 
  216. // 
  217. // 
  218. // 
  219. // HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  220. // 
  221. //      PauseChain() switches all the filters in a chain to the paused state.  If it cannot
  222. // switch one of the filtres into the paused state, all the filters in the chain are
  223. // stopped.  This method can only be called if the filter graph is paused.
  224. // 
  225. // Parameters:
  226. // - pStartFilter [in]
  227. //      The first filter in the filter chain.  Note that this can be the same 
  228. //  filter as pEndFilter . 
  229. // 
  230. // - pEndFilter [in]
  231. //      The last filter in the filter chain.  Note that this can be the same 
  232. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain extends 
  233. // from pStartFilter to the last downstream filter which can be in a filter chain.
  234. // For example, IFilterChain::StopChain( A, NULL ) would stop filter A.   
  235. // IFilterChain::StopChain( G, NULL ) would stop filters G and H.  
  236. // IFilterChain::StopChain( C, NULL ) would stop filters C and D.  Finally, 
  237. // IFilterChain::StopChain( E, NULL ) would fail because E cannot be in a filter 
  238. // chain (see the Filter Chain Definition section for more information).
  239. // 
  240. // 
  241. // Return Value:
  242. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  243. // information on interpreting HRESULTs.
  244. // 
  245. // 
  246. // 
  247. // HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  248. // 
  249. //  StopChain() switches all the filters in chain to the stopped state.
  250. // 
  251. // Parameters:
  252. // - pStartFilter [in]
  253. //      The first filter in the filter chain.  Note that this can be the same 
  254. //  filter as pEndFilter . 
  255. // 
  256. // - pEndFilter [in]
  257. //      The last filter in the filter chain.  Note that this can be the same 
  258. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain extends 
  259. // from pStartFilter to the last downstream filter which can be in a filter chain.
  260. // For example, IFilterChain::StopChain( A, NULL ) would stop filter A.   
  261. // IFilterChain::StopChain( G, NULL ) would stop filters G and H.  
  262. // IFilterChain::StopChain( C, NULL ) would stop filters C and D.  Finally, 
  263. // IFilterChain::StopChain( E, NULL ) would fail because E cannot be in a filter 
  264. // chain (see the Filter Chain Definition section for more information).
  265. // 
  266. // 
  267. // Return Value:
  268. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  269. // information on interpreting HRESULTs.
  270. // 
  271. // 
  272. // 
  273. // 
  274. // 
  275. // HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  276. // 
  277. //      RemoveChain() removes every filter in a chain from the filter graph.  
  278. // The filters can be removed while the graph is running.
  279. // 
  280. // Parameters:
  281. // - pStartFilter [in]
  282. //      The first filter in the filter chain.  Note that this can be the same 
  283. // filter as pEndFilter .
  284. // 
  285. // - pEndFilter [in]
  286. //      The last filter in the filter chain.  Note that this can be the same 
  287. // filter as pStartFilter.  If pEndFilter is NULL then the filter chain 
  288. // extends from pStartFilter to the last downstream filter which can be in a 
  289. // filter chain.  For example, IFilterChain::RemoveChain( A, NULL ) would remove 
  290. // filter A from the filter graph.   IFilterChain::RemoveChain( G, NULL ) would 
  291. // remove filters G and H.  IFilterChain::RemoveChain( C, NULL ) would remove 
  292. // filters C and D.  Finally, IFilterChain::RemoveChain( E, NULL ) would fail 
  293. // because E cannot be in a filter chain (see the Filter Chain Definition 
  294. // section for more information).
  295. // 
  296. // 
  297. // Return Value:
  298. //      An HRESULT.  See the Direct Show SDK and COM SDK documentation for more 
  299. // information on interpreting HRESULTs.
  300. // 
  301. // 
  302. [
  303.     local,
  304.     object,
  305.     uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29),
  306.     pointer_default(unique)
  307. ]
  308. interface IFilterChain : IUnknown
  309. {
  310.     HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  311.     HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  312.     HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  313.     HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter );
  314. }
  315.  
  316.  
  317.  
  318.  
  319.